TSQL Kill - Verbindungen trennen
Um offene Verbindungen zu einer Datenbank trennen zu können gibt es im TSQL den Befehl KILL.
Welche Prozesse gerade aktiv sind verrät die Systemtabelle MASTER..SysProcesses.
Folgende Prozesse sollten nicht beendet werden:
Spalte: cmd
- AWAITING COMMAND
Je nach dem was man gerade vorhat, müssen aber genau diese weg. Beispielsweise wenn die Datenbank gelöscht werden soll und das von aktiven Verbindungen unterbunden wird.
- CHECKPOINT SLEEP
- LAZY WRITER
- LOCK MONITOR
- SIGNAL HANDLER
Das folgende SQL listet alle Verbindungen auf dem SQL Server auf.
SELECT * FROM MASTER..SysProcesses
WHERE DBId = DB_ID(@DatabaseName)
Das folgende Skript listet alle Verbindungen zu einer Datenbank auf und gibt diese per PRINT aus. Mit dem Kill Befehl würden diese Prozesse beendet. Damit dies nicht aus versehen passiert ist der Befehl auskommentiert so das das Skript erst einmal gefahrlos ausprobiert werden kann.
DECLARE @DatabaseName nvarchar(50)
DECLARE @SPId int = -1
SET @DatabaseName = N´´
WHILE (NOT @SPId IS NULL)
BEGIN
SET @SPId = (SELECT TOP(1) SPId
FROM MASTER..SysProcesses
WHERE DBId = DB_ID(@DatabaseName) AND SPId <> @@SPId AND spid>@SPId
ORDER BY spid)
PRINT @SPId
-- KILL @SPId
END
GO
Als Procedure sieht das dann wie folgt aus:
CREATE PROCEDURE KillDBProccess(@DatabaseName nvarchar(50))
AS
-- EXECUTE AS { SELF | OWNER | ´user_name´ }
-- SELF ist der Ersteller der SP
-- OWNER ist der aktuelle Besitzer der SP
-- ´user_name´ ist irgend ein User
-- Immer daran denken das das Skript/die Prozedur im Kontext eines Users ablaufen muss der die Rechte hat!
DECLARE @SPId int = -1;
DECLARE @SQL varchar(max) = '';
WHILE (NOT @SPId IS NULL)
BEGIN
SET @SPId = (SELECT TOP(1) SPId
FROM MASTER..SysProcesses
WHERE DBId = DB_ID(@DatabaseName) AND SPId <> @@SPId AND spid>@SPId
ORDER BY spid)
PRINT @SPId
-- KILL @SPId /* Es könnte so einfach sein, leider erlaubt TSQL keine Variable im Kontext zu KILL daher:
SET @SQL = 'KILL ' + @SPId
EXEC (@SQL)
END
Schulung Microsoft SQL Server-Transact SQL Programmierung (TSQL) In dieser Schulung lernen Sie die Sprachelemente von Transact SQL kennen.
Schulung SQL - Die Datenbanksprache Diese Schulung vermittelt die Grundlagen von SQL und ist die Voraussetzung für die TSQL Schulung